/**
 * 计算时间差
 */
export function clacTime(date) {
  let formateDate = new Date(date.replace(/-/g, "/")).getTime();
  return dateDiff(formateDate);
}

/* 获取url参数 */
export function getUrl(name) {
  let urlName =
    decodeURIComponent(
      (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
        location.href
      ) || [, ""])[1].replace(/\+/g, "%20")
    ) || null;
  return urlName;
}

/**
 * 函数防抖 (只执行最后一次点击)
 * @param fn
 * @param delay
 * @returns {Function}
 * @constructor
 */
export const Debounce = (fn, t) => {
  let delay = t || 500;
  let timer;
  return function () {
      let args = arguments;
      if(timer){
          clearTimeout(timer);
      }
      timer = setTimeout(() => {
          timer = null;
          fn.apply(this, args);
      }, delay);
  }
};

/**
* 函数节流
* @param fn
* @param interval
* @returns {Function}
* @constructor
*/
export const Throttle = (fn, t) => {
  let last;
  let timer;
  let interval = t || 500;
  return function () {
      let args = arguments;
      let now = +new Date();
      if (last && now - last < interval) {
          clearTimeout(timer);
          timer = setTimeout(() => {
              last = now;
              fn.apply(this, args);
          }, interval);
      } else {
          last = now;
          fn.apply(this, args);
      }
  }
};

/*
 ** 时间戳显示为多少分钟前，多少天前的处理
 ** eg.
 ** console.log(dateDiff(1411111111111));  // 2014年09月19日
 ** console.log(dateDiff(1481111111111));  // 9月前
 ** console.log(dateDiff(1499911111111));  // 2月前
 ** console.log(dateDiff(1503211111111));  // 3周前
 ** console.log(dateDiff(1505283100802));  // 1分钟前
 */
// let dateDiff = function(timestamp) {
//   // 补全为13位
//   let arrTimestamp = (timestamp + "").split("");
//   for (let start = 0; start < 13; start++) {
//     if (!arrTimestamp[start]) {
//       arrTimestamp[start] = "0";
//     }
//   }
//   timestamp = arrTimestamp.join("") * 1;

//   let minute = 1000 * 60;
//   let hour = minute * 60;
//   let day = hour * 24;
//   let halfamonth = day * 15;
//   let month = day * 30;
//   let now = new Date().getTime();
//   let diffValue = now - timestamp;

//   // 如果本地时间反而小于变量时间
//   if (diffValue < 0) {
//     return "不久前";
//   }

//   // 计算差异时间的量级
//   let monthC = diffValue / month;
//   let weekC = diffValue / (7 * day);
//   let dayC = diffValue / day;
//   let hourC = diffValue / hour;
//   let minC = diffValue / minute;

//   // 数值补0方法
//   let zero = function(value) {
//     if (value < 10) {
//       return "0" + value;
//     }
//     return value;
//   };

//   // 使用
//   if (monthC > 12) {
//     // 超过1年，直接显示年月日
//     return (function() {
//       let date = new Date(timestamp);
//       return (
//         date.getFullYear() +
//         "年" +
//         zero(date.getMonth() + 1) +
//         "月" +
//         zero(date.getDate()) +
//         "日"
//       );
//     })();
//   } else if (monthC >= 1) {
//     return parseInt(monthC) + "月前";
//   } else if (weekC >= 1) {
//     return parseInt(weekC) + "周前";
//   } else if (dayC >= 1) {
//     return parseInt(dayC) + "天前";
//   } else if (hourC >= 1) {
//     return parseInt(hourC) + "小时前";
//   } else if (minC >= 1) {
//     return parseInt(minC) + "分钟前";
//   }
//   return "刚刚";
// };
